#
众所周知, 在Swift的扩展(Extension)中只能添加计算属性, 但是有时候, 我们需要添加存储属性的话, 就用到了Runtime的方法.
在为Extension添加存储属性的时候, 主要用到了下面两个方法:
1 | public func objc_setAssociatedObject(_ object: Any, _ key: UnsafeRawPointer, _ value: Any?, _ policy: objc_AssociationPolicy) |
介绍
objc_setAssociatedObject 参数
存储属性
参数1( object ) : 要添加属性的类
参数2( key ): 指定存储的key, 需要使用取址运算符&(参考下面示例)
参数3( policy ): 参数属性, 是个枚举, 根据不同的数据类型选择
objc_getAssociatedObject 参数
读取属性
参数1( object ) : 要添加属性的类
参数2( key ): 指定存储的key, 需要使用取址运算符&(参考下面示例)
objc_AssociationPolicy 类型
1 | public enum objc_AssociationPolicy : UInt { |
示例:
以为UIView添加扩展为例
1 | var myNameKey = 100 |
上面为UIView添加了三个不同类型的属性, 在使用的时候, 就可以正常的进行赋值/取值:
1 | let view = UIView() |
输出:
1 | 100 |